package org.ms.nerver.governor.fuse;

import java.lang.annotation.Documented;
import java.lang.annotation.ElementType;
import java.lang.annotation.Inherited;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

/**
 * 熔断机制
 * <p>
 * 提供熔断器机制,可以自动运行或手动调用,停止当前依赖一段时间(10秒)，
 * 熔断器默认错误率阈值为50%,超过将自动运行。
 * @author lry
 */
@Target({ElementType.METHOD})
@Retention(RetentionPolicy.RUNTIME)
@Inherited
@Documented
public @interface Fuse {
	
	/**
	 * 熔断状态,默认为false表示未熔断,当触发熔断后会自动设置为true,恢复后又设置为false
	 * @return
	 */
	boolean fuseState() default false;

	/**
	 * 错误率阀值(%),默认为错误率超过50%,则触发熔断
	 */
	double errRate() default 50;
	
	/**
	 * 每次熔断时间间隔,默认熔断60秒
	 * @return
	 */
	long fuseTime() default 60000;
	
	/**
	 * 设置熔断到期后重试恢复周期,默认每隔10秒重试一次(成功则恢复,否则永久重试下去)
	 * @return
	 */
	long retryCycle() default 10000;
	
	/**
	 * 设置熔断是否恢复,默认为true表示需要恢复
	 * @return
	 */
	boolean recover() default true;
	
}
